轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)

您所在的位置:网站首页 mybatis pagebounds 轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)

轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)

#轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)| 来源: 网络整理| 查看: 265

写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确。详细内容可以参考文中帖的链接,比较好!!! 最近看的轻量化神经网络:SqueezeNet、Xception、MobileNet、ShuffleNet

时间轴 2016.02 伯克利&斯坦福提出 SqueezeNet 2016.10 google提出 Xception 2017.04 google提出 MobileNet 2017.07 face++提出 ShuffleNet 模型轻量化的方法 卷积核分解:使用1xN和NX1卷积核代替NXN卷积核; 使用深度压缩deep compression方法:网络剪枝、量化、哈弗曼编码; 奇异值分解; 硬件加速器; 低精度浮点数保存; 小模型的好处: 在分布式训练中,与服务器通信需求小; 参数少,从云端下载模型的数量少; 更适合在嵌入式、移动设备上部署; 几种模型小结: SqueezeNet,提出了fire module【使用 1x1 卷积核替换部分 3x3 卷积核,减少参数量;同时在squeeze阶段,限制 input feature map的channel数,又一次减少参数】。在整体网络模型中减少pooling,平均每3个fire module后有一个max pooling,分类前的全连接层替换成average pooling。 Xception,参差结构+可分离卷积(Separable Convolution)【对每一个通道先进行 1x1 卷积,再进行 3x3 卷积】。在Inception v3模型上改进, 参数量没减少,精度提高。 MobileNetv1,宽度\分辨率因子 + 深度可分离卷积(Depthwise Separable Convolution)【对每一个通道先进行 3x3 卷积,再进行 1x1 卷积】。参数量下降 MobileNetv2,倒残差结构+深度可分离卷积+relu6。发现relu对低维特征损失较严重,1)提出反残差模块【先升维:增加信息量,再降维度:较少参数】;2)较少block最后的Relu改为lineat,减少信息破坏。移动部署float16,所以换成relu6 MobileNetv3,倒残差结构+深度可分离卷积+se注意力机制+h-swish激活。使用堆积木手段和nas搜索出一个small结构、一个large结构 ShuffleNet,深度可分离卷积+分组卷积+shuffle机制 。借鉴Resnext的分组卷积思想,不过全部只用1x1卷积核,减少参数量;加入了shuffle机制(通道清洗),加强了通道间的信息流通,一定程度上缓解了由于分组卷积导致的通道关系损失。 1. SqueezeNet 设计原则 替换3x3的卷积kernel为1x1的卷积kernel 减少输入3x3卷积的input feature map数量 减少pooling Fire Module

Fire Module是本文的核心构件,思想非常简单,就是将原来简单的一层conv层变成两层:squeeze层+expand层,各自带上Relu激活层。在squeeze层里面全是1x1的卷积kernel,数量记为S11;在expand层里面有1x1和3x3的卷积kernel,数量分别记为E11和E33,要求S11 < input map number即满足上面的设计原则(2)。expand层之后将1x1和3x3的卷积output feature maps在channel维度拼接起来。

在这里插入图片描述

总体模型

总共有9层fire module,中间穿插一些max pooling,最后是global avg pooling代替了fc层(参数大大减少)。在开始和最后还有两层最简单的单层conv层,保证输入输出大小可掌握。 在这里插入图片描述 SqueezeNet参考

2. Xception 设计原则 提出Separable Convolution (可分离卷积)【与 MobileNet的不同】 参差思想 Separable Convolution Module

先进行普通卷积操作,再对 1×11×1 卷积后的每个channel分别进行 3×33×3 卷积操作,最后将结果 concat: 在这里插入图片描述

总体模型

Xception 的结构基于 ResNet,但是将其中的卷积层换成了Separable Convolution Module。如下图所示。整个网络被分为了三个部分:Entry,Middle和Exit。 在这里插入图片描述 Xception 在 ImageNet 上,比 Inception-v3 的准确率稍高, 同时参数量有所下降,在 Xception 中加入的类似 ResNet 的残差连接机制也显著加快了Xception的收敛过程并获得了显著更高的准确率。但由于其计算过程较为零散,现有的卷积神经网络实现中它的效率都不够高,此网络旨在提高精度、不在挺高速度。

Xception参考 深度可分离卷积理解

3. MobileNet 设计原则 采用depthwise separable convolution,就是分离卷积核,减少参数量 设置宽度因子width multipler【在channel上】和分辨率因子resolution multiplier【在feature map的长、宽上】,减小参数量 Depthwise Separable Convolution

在这里插入图片描述 depthwise separable convolution

总体模型

在这里插入图片描述 MobileNet参考

MobeileNetv1与v2的区别:

参考1:详解MobileNetV2 参考2:MobileNet v1 和 MobileNet v2

v1使用了Depthwise Separable Convolution,通过将跨通道的3 x 3卷积换成单通道的3 x 3卷积 + 跨通道的1 x 1卷积来达到减少参数的目的【3 x 3卷积核约变为原理的1/8】 v2在v1的基础上加入了残差结构,同时发现relu对低维通道的feature map映射到高维再映射回低维具有非常严重的信息损失。针对这个问题,两个办法,1.使用Inverted residuals【因为relu对于高维特征影响较小,所以扩展成高维经过relu再压缩】;2.使用Linear Bottleneck【因为高维映射到低维,使用relu会滤掉有用信息,直接换成线性激活函数】 Q:为什么低维特征效果不好? A:因为低维特征对应的卷积核也少,卷积核少学到图片内的特征就很有限,所以效果不好

模块结构: 在这里插入图片描述

4. ShuffleNet 设计原则 借鉴resnext分组卷积思想,但不同的是采用1x1卷积核; 进行通道清洗,加强通道间的信息流通,提高信息表示能力; 采用mobilenet的Depthwise Separable Convolution方法; 分组卷积

借鉴resnext的分组卷积,全部使用1x1卷积核 在这里插入图片描述

channel shuffle机制

什么是通道shuffle,就是在分组卷积后得到的feature map不直接进行concat,先将每组feature map按通道打乱,重新concat,如下图所示: 在这里插入图片描述

对于一个卷积层分为g组,

分组卷积后一共得到g×n个输出通道的feature map; 将feature map 进行 reshape为(g,n); 进行转置为(n,g); 对转置结果flatten,再分回g组作为下一层的输入。 在这里插入图片描述 shuffle unit

a是标准的残差结构,不过是3x3卷积核使用了mobilenet中的depthwise convolution操作; b是在a的基础上加了本文的通道shuffle操作,先对1x1卷积进行分组卷积操作,然后进行channel shuffle; c是在旁路加了一步长为2的3x3的平均池化,并将前两者残差相加的操作改为了通道concat,增加了通道数量。 在这里插入图片描述

总体模型

在这里插入图片描述

参考链接:

https://blog.csdn.net/liuxiao214/article/details/81875251


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3